home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gtlayout.lha / Source / LTP_PasswordEditRoutine.c < prev    next >
C/C++ Source or Header  |  1998-09-09  |  2KB  |  126 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1998 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. /*****************************************************************************/
  15.  
  16. #include <intuition/sghooks.h>    /* For struct SGWork */
  17.  
  18. /*****************************************************************************/
  19.  
  20. #include "Assert.h"
  21.  
  22. /*****************************************************************************/
  23.  
  24. #ifdef DO_PASSWORD_KIND    /* Support code */
  25.  
  26. ULONG SAVE_DS ASM
  27. LTP_PasswordEditRoutine(REG(a0) struct Hook *Hook,REG(a2) struct SGWork *Work,REG(a1) Msg msg)
  28. {
  29.     LayoutHandle *Handle;
  30.     ObjectNode *Node;
  31.     STRPTR Buffer;
  32.  
  33.     if(!GETOBJECT(Work->Gadget,Node))
  34.         return(TRUE);
  35.  
  36.     switch(msg->MethodID)
  37.     {
  38.         case SGH_KEY:
  39.  
  40.             Buffer = Node->Special.String.RealString;
  41.             Handle = Hook->h_Data;
  42.  
  43.             if(Work->IEvent->ie_Code == 0x5F && Handle->HelpHook)
  44.             {
  45.                 Work->Code        = 0x5F;
  46.                 Work->Actions    = (Work->Actions & ~SGA_BEEP) | SGA_END | SGA_USE;
  47.  
  48.                 break;
  49.             }
  50.  
  51.             switch(Work->EditOp)
  52.             {
  53.                 case EO_INSERTCHAR:
  54.  
  55.                     Buffer[Work->BufferPos - 1]    = Work->Code;
  56.                     Buffer[Work->NumChars]        = 0;
  57.  
  58.                     Work->WorkBuffer[Work->BufferPos - 1] = (UBYTE)'·';
  59.  
  60.                     break;
  61.  
  62.                 case EO_CLEAR:
  63.  
  64.                     Work->WorkBuffer[0]    = 0;
  65.                     Work->NumChars        = 0;
  66.                     Work->BufferPos        = 0;
  67.                     Work->EditOp        = EO_BIGCHANGE;
  68.  
  69.                     Buffer[0] = 0;
  70.  
  71.                     break;
  72.  
  73.                 case EO_DELBACKWARD:
  74.  
  75.                     Buffer[Work->NumChars] = 0;
  76.                     break;
  77.  
  78.                 case EO_NOOP:
  79.  
  80.                     break;
  81.  
  82.                 case EO_ENTER:
  83.  
  84.                     if(!(Work->IEvent->ie_Qualifier & QUALIFIER_SHIFT))
  85.                     {
  86.                         if(!Node->Special.String.LastGadget && Node->Special.String.LayoutHandle->AutoActivate)
  87.                             Work->Actions |= SGA_NEXTACTIVE;
  88.  
  89.                         if(!(Work->Actions & SGA_NEXTACTIVE))
  90.                             Work->Code = '\r';
  91.                     }
  92.  
  93.                     break;
  94.  
  95.                 case EO_MOVECURSOR:
  96.                 case EO_DELFORWARD:
  97.  
  98.                     Work->Actions &= ~SGA_USE;
  99.                     break;
  100.  
  101.                 default:
  102.  
  103.                     Work->Actions &= ~SGA_USE;
  104.                     Work->Actions |=  SGA_BEEP;
  105.                     break;
  106.             }
  107.  
  108.             break;
  109.  
  110.         case SGH_CLICK:
  111.  
  112.             Work->BufferPos    = Work->NumChars;
  113.             Work->EditOp    = EO_BIGCHANGE;
  114.  
  115.             break;
  116.  
  117.         default:
  118.  
  119.             return(FALSE);
  120.     }
  121.  
  122.     return(TRUE);
  123. }
  124.  
  125. #endif    /* DO_PASSWORD_KIND */
  126.